package Orm.jdbc.jdbcMetadata;

import Orm.jdbc.connectorPool.JDBCUtils;

import java.sql.Connection;
import java.sql.ParameterMetaData;
import java.sql.PreparedStatement;
import java.sql.SQLException;

/**
 * 获得预编译SQL语句中 “?” 信息。
 */
public class ParameterMetaDataStudy {
    public static void main(String[] args) throws SQLException {
        Connection conn = JDBCUtils.getConnection();
        String sql = "select * from city where ID=? And name=?";
        /**
         * 预编译sql语句
         */
        PreparedStatement stmt = conn.prepareStatement(sql);
        // 通过ParameterMetaData 获得 ？ 相关信息
        ParameterMetaData parameterMetaData = stmt.getParameterMetaData();
        // 获得个数
        int count = parameterMetaData.getParameterCount();
        System.out.println("参数个数为： "+count);
        /**
         * 我们可以根据这个getParameterType根据返回的type进行参数填充，但是对于mysql
         * 返回的都是varchar，这个就不好办了,所以说，如果我们需要编写ORM自动填充逻辑，我们不应该根据这个来
         */
        for (int i = 1; i <= count; i++) {
            // 该方法并不是所有数据库都支持 --- MySQL不支持（所有返回类型都是varchar）
            int type = parameterMetaData.getParameterType(i);
            System.out.println("参数类型编号为： "+type);
            System.out.println("参数类型为： "+parameterMetaData.getParameterTypeName(i));
            System.out.println(parameterMetaData.getParameterClassName(i));
        }
    }
}
